home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Language / Compiler / symbols.h < prev    next >
C/C++ Source or Header  |  1990-08-16  |  3KB  |  107 lines

  1. /*
  2.  * @(#)symbols.h    1.3  7/9/87
  3.  */
  4. #ifndef symbols_h
  5. #define symbols_h
  6. #ifndef tags_h
  7. #include "tags.h"
  8. #endif
  9.  
  10. #ifndef ident_h
  11. #include "ident.h"
  12. #endif
  13.  
  14. #ifndef addresses_h
  15. #include "addresses.h"
  16. #endif
  17.  
  18. typedef struct Value {
  19.   struct sNode        *ATinfo;
  20.   struct sNode        *CTinfo;
  21.   struct sNode        *value;
  22. } Value, *ValuePtr;
  23.  
  24. #define FIRSTSYMBOL 1025
  25. typedef enum {ST_Unknown, ST_Const, ST_Var,
  26.       ST_Param, ST_Result, ST_OpName} ST_Kinds;
  27. extern char *ST_KindName[];
  28.  
  29. typedef enum {C_ATLit, C_ObLit, 
  30.       C_OpSig, C_OpDef,
  31.       C_UnavailableHandler, C_Comp,
  32.       C_Block, C_Monitor} ST_Contexts;
  33.  
  34. typedef enum { T_NotStarted, T_EvaluatingType, 
  35.       T_EvaluatingValue, T_EvaluationDone, T_AllocationStarted,
  36.       T_AllocationDone } EvaluationStage;
  37.  
  38. typedef short int SymbolNumber;
  39. extern SymbolNumber nextSymbolToAllocate;
  40.  
  41. typedef struct sSTEntry {
  42.   Tag              tag    :8;
  43.   unsigned int          nestingDepth    :8;
  44.   ST_Kinds          itsKind    :4;
  45.  
  46.   unsigned int         isManifest    :1;
  47.   unsigned int         hasValue    :1;
  48.   unsigned int         isSelf        :1;
  49.   unsigned int         isImport    :1;
  50.   unsigned int         usedOutsideInitially:1;
  51.   unsigned int         isAttached    :1;
  52.   unsigned int         isMove        :1;
  53.   unsigned int          isSingleReference:1;
  54.   unsigned int         isLocal    :1;
  55.   unsigned int         unused        :3;
  56.   SymbolNumber          itsSymbolNumber;
  57.   Ident             itsIdent;
  58.   Value             value;
  59.   union {
  60.     struct sSTEntry    *next;
  61.     Address         address;
  62.   } v;
  63.   char            *itsName;
  64. } STEntry, *Symbol;
  65.  
  66. #define STENTRIESPERBLOCK 60
  67. typedef struct sSymbolBlock {
  68.   Symbol          symbols[STENTRIESPERBLOCK];
  69. } SymbolBlock, *SymbolBlockPtr;
  70.  
  71. typedef struct sScope {
  72.   ST_Contexts         itsContext;
  73.   struct sScope        *enclosing;
  74.   Symbol         first;
  75.   struct sNode        *itsNode;
  76.   short             nestingDepth;
  77. } Scope, *ScopePtr;
  78.  
  79. #define ST_Fetch(S) (S)
  80.  
  81. #define ST_SymbolName(s) ((s)->itsName == NULL ? Ident_Name((s)->itsIdent) : (s)->itsName)
  82.  
  83. extern void ST_EnterNewScope(/* fNodePtr, c */);
  84. /* ST_Contexts c; NodePtr fNodePtr; */
  85.  
  86. extern    void        ST_EnterOldScope();
  87.  
  88. extern    void        ST_ExitScope();
  89.  
  90. Symbol ST_Lookup(/* fIdent, depth */);
  91. /* Ident fIdent;
  92. int depth;
  93.     = 1 means only check in the smallest scope
  94.     = 2 means all, importing it into the object if necessary
  95.     = 3 means object */
  96.  
  97. Symbol ST_Define(/* fIdent, kind, depth */);
  98. /* Ident fIdent; ST_Kinds kind; int depth; same as in lookup */
  99.  
  100. int getNestingDepth(/* fNodePtr */);
  101. /* NodePtr fNodePtr ; */
  102. int Symbol_IsImport(/* sym */);
  103. /* Symbol sym; */
  104. Symbol ST_Create(/* fNodePtr, fIdent */);
  105. /* NodePtr fNodePtr; Ident fIdent; */
  106. #endif
  107.